如为oracle配置了大内存,重启oracle实例可在alter告警日志中观察是否实例使用了大内存,但是否有其他方式确定某个进程使用了大内存呢,下面以oracle为例来说明如何从系统侧获知进程是否使用了大内存。

如oracle sga配置为200G:

SQL> show parameter sga
sga_target                           big integer 200G

系统配置大内存情况:

% cat /etc/sysctl.conf 
vm.nr_hugepages                       = 110080 
vm.hugetlb_shm_group                  = 5001

当前大内存使用情况:(110080-7166)*2/1024=201G

% grep HugePages_ /proc/meminfo 
HugePages_Total:   110080
HugePages_Free:     7166
HugePages_Rsvd:        0
HugePages_Surp:        0

系统有如下数据库,进程如下所示:

% ps -ef|grep pmon_
grid     111896      1  0 Jan14 ?        00:00:34 asm_pmon_+ASM1
oracle   114732      1  0 Jan14 ?        00:00:54 ora_pmon_db1
grid     248262      1  0 Jan14 ?        00:00:18 mdb_pmon_-MGMTDB

那么,我们可使用如下命令或者进程使用的大内存情况:

# db1实例使用了200G大内存:
% grep -B 11 'KernelPageSize:     2048 kB' /proc/114732/smaps \
  | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print "gb: "sum/1024/1024}'
gb: 200.002

# MGMTDB实例使用了1G大内存:
% grep -B 11 'KernelPageSize:     2048 kB' /proc/248262/smaps \
  | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print "gb: "sum/1024/1024}'
gb: 1.00195

我是读书人
114 声望136 粉丝

随意记录,想着啥,写啥